package LN.Alquileres;

import LN.Persona.Visitante.Visitante;
import LN.Varios.Hosteria;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.envers.Audited;

@Audited
@Entity
public class Hospedaje_Habitacion extends Hospedaje implements Serializable {

   
    @ManyToOne
    private Habitacion unaHabitacion;
    @ManyToOne
    private Tarifa_Habitacion unaTarifa_Habitacion;
    @OneToMany
    private List<Movimiento_Hospedaje> movimientos;


    public Hospedaje_Habitacion() {
    }

    public Hospedaje_Habitacion(Habitacion unaHabitacion, Tarifa_Habitacion unaTarifa_Habitacion, Visitante unVisitante, Date ingreso, Date egreso, double descuento) {
        super(unVisitante, ingreso, egreso, descuento);
        this.unaHabitacion = unaHabitacion;
        this.unaTarifa_Habitacion = unaTarifa_Habitacion;
        this.movimientos = new LinkedList<>();
         Hosteria.persistencia.insert(this);
    }



    public Habitacion getUnaHabitacion() {
        return unaHabitacion;
    }

    public void setUnaHabitacion(Habitacion unaHabitacion) {
        this.unaHabitacion = unaHabitacion;
    }

    public Tarifa_Habitacion getUnaTarifa_Habitacion() {
        return unaTarifa_Habitacion;
    }

    public void setUnaTarifa_Habitacion(Tarifa_Habitacion unaTarifa_Habitacion) {
        this.unaTarifa_Habitacion = unaTarifa_Habitacion;
    }

    public List<Movimiento_Hospedaje> getMovimientos() {
        return movimientos;
    }

    public void setMovimientos(List<Movimiento_Hospedaje> movimientos) {
        this.movimientos = movimientos;
    }
 


  

    @Override
    public String toString() {
        return super.getUnVisitante().getApellido();
    }

    public Object[] toVector() {
        Object fila[] = {this.getUnaHabitacion().getNumero(), this};
        return fila;
    }

    public void altaMovimiento_Hospedaje(double monto, String tipo, Date fecha_movimiento) {
        Movimiento_Hospedaje nuevoMH = new Movimiento_Hospedaje(monto, tipo, fecha_movimiento, this);
        this.movimientos.add(nuevoMH);
        Hosteria.getPersistencia().update(this);
    }

    public Object[] toVector2() {
        Calendar in = Calendar.getInstance();
        in.setTime(this.getIngreso());
        int dia = in.get(Calendar.DAY_OF_MONTH);
        int mes = in.get(Calendar.MONTH);
        int anio = in.get(Calendar.YEAR);
        int hora = in.get(Calendar.HOUR);
        int minutos = in.get(Calendar.MINUTE);

        Object fila[] = {dia + "/" + mes + "/" + anio, hora + "/" + minutos, this.getUnaTarifa_Habitacion().getTipo(), this.getUnaTarifa_Habitacion().getPrecio(), 0.00};
        return fila;
    }

    public Object[] toHistorial() {
        Calendar in = Calendar.getInstance();
        in.setTime(this.getIngreso());
        int dia = in.get(Calendar.DAY_OF_MONTH);
        int mes = in.get(Calendar.MONTH);
        int anio = in.get(Calendar.YEAR);
        int hora = in.get(Calendar.HOUR);
        int minutos = in.get(Calendar.MINUTE);

        Object fila[] = {this.getUnaHabitacion(), this.getUnaTarifa_Habitacion().getTipo(), this.getUnVisitante().getApellido() + " " + this.getUnVisitante().getNombre(), this.getIngreso(), this.getEgreso()};
        return fila;
    }
}
